import java.util.Scanner;

public class test16 {
    public static void main(String[] args) {
        // 就是算第n个是否是负数,如果是负数就要比大小,或者直接舍去
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(); // 数组个数
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = in.nextInt();
        }
        System.out.println(getResult(nums));
    }

    public static int getResult(int[] nums){
        if(nums.length == 0)
            return 0;
        int max = 0; // 用来记录最大值
        int flag = 0;// 记录临时值
        for (int number:nums){
            // 首先只要最大值更新了就替换
            if(flag > max)
                max = flag;
            if(number >= 0){
                flag += number;
                continue;
            }
            // 小于0 需要进行判定
            if(-number < flag) {
                flag += number;
                continue;
            }
            // 加上之后便负数了
            flag = 0;
        }
        if(max < flag)
            max = flag;
        return max;
    }
}
